#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct TrieNode {
    int next[2] = {-1, -1};      // 子节点索引，0 和 1
    int end_cnt = -1;            // 叶子节点记录的插入次数（cnt）
};

void solve() {
    int n;
    cin >> n;
    vector<TrieNode> trie(1);  // 初始根节点
    vector<int> arr(n + 1);    // 存储输入数组（索引从 1 开始）
    int cnt = 0;               // 插入次数计数器

    // 插入函数：动态构建 Trie 并更新路径信息
    auto insert = [&](int x) {
        int p = 0;
        for (int i = 30; i >= 0; i--) {
            int u = (x >> i) & 1;
            if (trie[p].next[u] == -1) {
                trie[p].next[u] = trie.size();
                trie.emplace_back();
            }
            p = trie[p].next[u];
        }
        trie[p].end_cnt = cnt;  // 记录叶子节点的插入次数
    };

    auto search = [&](int x) {
        int p = 0;
        int res = 0;
        for (int i = 30; i >= 0; i--) {
           int u = x >> i & 1;
           if(trie[p].next[!u] != - 1)
           {
              p = trie[p].next[!u];
              res = res * 2 + 1;
           }
           else
           {
            p = trie[p].next[u];
            res = res * 2;
           }
        }
        return res;
    };
    // 读取输入
    for (int i = 1; i <= n; i++) cin >> arr[i];

    // 遍历数组，动态插入并查询
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        insert(arr[i]);
        cnt++;
    }
    for(int i = 1; i <= n ;i ++)
    {
        ans = max(ans,search(arr[i]));
    }
    cout << ans << endl;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int tt = 1;
    //cin >> tt;
    while (tt--) solve();
}